λ λΉ λ₯Έ μΉ μ±λ₯μ κ²½ννμΈμ. Chrome κ°λ°μ λκ΅¬λ‘ CSS 그리λ λ μ΄μμ κ³μ°μ νλ‘νμΌλ§νκ³ , νΈλ ν¬κΈ° μ‘°μ μ μν₯μ λΆμνλ©°, λ λλ§ νμ΄νλΌμΈμ μ΅μ ννλ λ°©λ²μ λ°°μ°μΈμ.
CSS 그리λ νΈλ ν¬κΈ° μ‘°μ μ±λ₯ νλ‘νμΌλ§: λ μ΄μμ κ³μ° λΆμ μ¬μΈ΅ νꡬ
CSS 그리λλ μΉ λ μ΄μμμ νλͺ μ μΌμΌμΌ, 볡μ‘νκ³ λ°μνμΈ λμμΈμ λ§λλ λ° μ λ‘ μλ κ°λ ₯ν¨κ³Ό μ μ°μ±μ μ 곡ν©λλ€. `fr` λ¨μ, `minmax()`, μ½ν μΈ μΈμ ν¬κΈ° μ‘°μ κ³Ό κ°μ κΈ°λ₯ λλΆμ, μ°λ¦¬λ νλ κΏμ 그리λ μΈν°νμ΄μ€λ₯Ό λλΌμΈ μ λλ‘ μ μ μ½λλ‘ κ΅¬μΆν μ μμ΅λλ€. νμ§λ§ ν° νμλ ν° μ± μμ΄ λ°λ¦ λλ€. μΉ μ±λ₯μ μΈκ³μμ κ·Έ μ± μμ μ°λ¦¬κ° μ νν λμμΈμ κ³μ° λΉμ©μ μ΄ν΄νλ λ° μμ΅λλ€.
μ°λ¦¬λ μ’ μ’ μλ°μ€ν¬λ¦½νΈ μ€νμ΄λ μ΄λ―Έμ§ λ‘λ© μ΅μ νμ μ§μ€νμ§λ§, μ€μνλ©΄μλ μμ£Ό κ°κ³Όλλ μ±λ₯ λ³λͺ© νμμ λΈλΌμ°μ μ λ μ΄μμ κ³μ° λ¨κ³μ λλ€. λΈλΌμ°μ κ° νμ΄μ§μ μμ ν¬κΈ°μ μμΉλ₯Ό κ²°μ ν΄μΌ ν λλ§λ€ 'λ μ΄μμ' μμ μ μνν©λλ€. 볡μ‘ν CSS, νΉν μ κ΅ν 그리λ ꡬ쑰λ μ΄ κ³Όμ μ κ³μ°μ μΌλ‘ λΉμΈκ² λ§λ€μ΄ μνΈμμ© μ§μ°, λ λλ§ μ§μ°, κ·Έλ¦¬κ³ μ’μ§ μμ μ¬μ©μ κ²½νμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. λ°λ‘ μ΄ μ§μ μμ μ±λ₯ νλ‘νμΌλ§μ λλ²κΉ λꡬλ₯Ό λμ΄, λμμΈ λ° κ°λ° κ³Όμ μ μ€μν λΆλΆμ΄ λ©λλ€.
μ΄ ν¬κ΄μ μΈ κ°μ΄λλ CSS 그리λ μ±λ₯μ μΈκ³λ‘ μ¬λ¬λΆμ κΉμ΄ μλ΄ν κ²μ λλ€. μ°λ¦¬λ λ¬Έλ²μ λμ΄ μ±λ₯ μ°¨μ΄μ 'μ΄μ 'λ₯Ό νꡬν κ²μ λλ€. μ¬λ¬λΆμ λΈλΌμ°μ κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ κ·Έλ¦¬λ νΈλ ν¬κΈ° μ‘°μ μ λ΅μΌλ‘ μΈν΄ λ°μνλ λ μ΄μμ λ³λͺ© νμμ μΈ‘μ , λΆμ λ° μ§λ¨νλ λ°©λ²μ λ°°μ°κ² λ κ²μ λλ€. μ΄ κ°μ΄λλ₯Ό λ§μΉλ©΄ μλ¦λ΅κ³ λ°μνμΌ λΏλ§ μλλΌ λ²κ°μ²λΌ λΉ λ₯Έ λ μ΄μμμ ꡬμΆν μ μλ λ₯λ ₯μ κ°μΆκ² λ κ²μ λλ€.
λΈλΌμ°μ λ λλ§ νμ΄νλΌμΈμ μ΄ν΄
μ΅μ ννκΈ° μ μ, μ°λ¦¬λ λ¨Όμ κ°μ νλ €λ νλ‘μΈμ€λ₯Ό μ΄ν΄ν΄μΌ ν©λλ€. λΈλΌμ°μ κ° μΉνμ΄μ§λ₯Ό λ λλ§ν λ, μ’ μ’ μ£Όμ λ λλ§ κ²½λ‘(Critical Rendering Path)λΌκ³ λΆλ¦¬λ μΌλ ¨μ λ¨κ³λ₯Ό λ°λ¦ λλ€. μ νν μ©μ΄λ λΈλΌμ°μ λ§λ€ μ½κ° λ€λ₯Ό μ μμ§λ§, ν΅μ¬ λ¨κ³λ μΌλ°μ μΌλ‘ μΌκ΄λ©λλ€:
- μ€νμΌ(Style): λΈλΌμ°μ λ CSSλ₯Ό νμ±νκ³ κ° DOM μμμ μ΅μ’ μ€νμΌμ κ²°μ ν©λλ€. μ¬κΈ°μλ μ νμ ν΄κ²°, μΊμ€μΌμ΄λ μ²λ¦¬, λͺ¨λ λ Έλμ λν κ³μ°λ μ€νμΌ κ³μ°μ΄ ν¬ν¨λ©λλ€.
- λ μ΄μμ(Layout) (λλ 리νλ‘μ°): μ΄κ²μ΄ μ°λ¦¬μ μ£Όλ μ΄μ μ λλ€. μ€νμΌμ΄ κ³μ°λ ν, λΈλΌμ°μ λ κ° μμμ κΈ°ννμ ꡬ쑰λ₯Ό κ³μ°ν©λλ€. κ° μμκ° νμ΄μ§μ μ΄λμ μμΉν΄μΌ νκ³ μΌλ§λ λ§μ 곡κ°μ μ°¨μ§νλμ§ μμλ λλ€. λλΉ, λμ΄, μμΉμ κ°μ κΈ°ννμ μ 보λ₯Ό ν¬ν¨νλ 'λ μ΄μμ νΈλ¦¬' λλ 'λ λ νΈλ¦¬'λ₯Ό μμ±ν©λλ€.
- νμΈνΈ(Paint): μ΄ λ¨κ³μμ λΈλΌμ°μ λ ν½μ μ μ±μλλ€. μ΄μ λ¨κ³μ λ μ΄μμ νΈλ¦¬λ₯Ό κ°μ Έμ νλ©΄μ ν½μ μ§ν©μΌλ‘ λ³νν©λλ€. μ¬κΈ°μλ ν μ€νΈ, μμ, μ΄λ―Έμ§, ν λ리, κ·Έλ¦Όμ λ± μμμ λͺ¨λ μκ°μ λΆλΆμ 그리λ μμ μ΄ ν¬ν¨λ©λλ€.
- ν©μ±(Composite): λΈλΌμ°μ λ λ€μν νμΈνΈλ λ μ΄μ΄λ₯Ό μ¬λ°λ₯Έ μμλ‘ νλ©΄μ 그립λλ€. κ²ΉμΉκ±°λ `transform` λλ `opacity`μ κ°μ νΉμ μμ±μ κ°μ§ μμλ νμ μ λ°μ΄νΈλ₯Ό μ΅μ ννκΈ° μν΄ μ’ μ’ μ체 λ μ΄μ΄μμ μ²λ¦¬λ©λλ€.
'λ μ΄μμ' λ¨κ³κ° 그리λ μ±λ₯μ μ€μν μ΄μ
κ°λ¨ν λΈλ‘ λ° μΈλΌμΈ λ¬Έμμ λ μ΄μμ λ¨κ³λ λΉκ΅μ κ°λ¨ν©λλ€. λΈλΌμ°μ λ μ’ μ’ λ¨μΌ ν¨μ€(single pass)λ‘ μμλ₯Ό μ²λ¦¬νμ¬ λΆλͺ¨λ₯Ό κΈ°λ°μΌλ‘ ν¬κΈ°λ₯Ό κ³μ°ν μ μμ΅λλ€. νμ§λ§ CSS 그리λλ μλ‘μ΄ μμ€μ 볡μ‘μ±μ λμ ν©λλ€. 그리λ 컨ν μ΄λλ μ μ½ κΈ°λ° μμ€ν μ λλ€. 그리λ νΈλμ΄λ μμ΄ν μ μ΅μ’ ν¬κΈ°λ μ’ μ’ λ€λ₯Έ νΈλμ ν¬κΈ°, 컨ν μ΄λμ μ¬μ© κ°λ₯ν 곡κ°, λλ μ¬μ§μ΄ νμ μμ΄ν λ΄ μ½ν μΈ μ κ³ μ ν ν¬κΈ°μ λ°λΌ λ¬λΌμ§λλ€.
λΈλΌμ°μ μ λ μ΄μμ μμ§μ μ΅μ’ λ μ΄μμμ λλ¬νκΈ° μν΄ μ΄ λ³΅μ‘ν λ°©μ μ μμ€ν μ νμ΄μΌ ν©λλ€. 그리λ νΈλμ μ μνλ λ°©μ, μ¦ ν¬κΈ° μ‘°μ λ¨μμ ν¨μμ μ νμ μ΄ μμ€ν μ ν΄κ²°νλ λ° νμν λμ΄λμ μκ°μ μ§μ μ μΈ μν₯μ λ―ΈμΉ©λλ€. μ΄κ²μ΄ λ°λ‘ `grid-template-columns`μ μ¬μν΄ λ³΄μ΄λ λ³κ²½μ΄ λ λλ§ μ±λ₯μ λΆκ· νμ μΈ μν₯μ λ―ΈμΉ μ μλ μ΄μ μ λλ€.
CSS 그리λ νΈλ ν¬κΈ° μ‘°μ μ ꡬ쑰: μ±λ₯ κ΄μ
ν¨κ³Όμ μΌλ‘ νλ‘νμΌλ§νλ €λ©΄, μ¬μ©ν μ μλ λꡬμ μ±λ₯ νΉμ±μ μ΄ν΄ν΄μΌ ν©λλ€. μΌλ°μ μΈ νΈλ ν¬κΈ° μ‘°μ λ©μ»€λμ¦μ λΆμνκ³ μ μ¬μ μΈ κ³μ° λΉμ©μ μ΄ν΄λ³΄κ² μ΅λλ€.
1. μ μ μ΄κ³ μμΈ‘ κ°λ₯ν ν¬κΈ° μ‘°μ
μ΄λ€μ λ μ΄μμ μμ§μ λͺ ννκ³ λͺ¨νΈνμ§ μμ μ 보λ₯Ό μ 곡νκΈ° λλ¬Έμ κ°μ₯ κ°λ¨νκ³ μ±λ₯μ΄ λ°μ΄λ μ΅μ μ λλ€.
- κ³ μ λ¨μ (`px`, `rem`, `em`): νΈλμ `grid-template-columns: 200px 10rem;`μΌλ‘ μ μνλ©΄ λΈλΌμ°μ λ μ¦μ μ΄ νΈλλ€μ μ νν ν¬κΈ°λ₯Ό μ μ μμ΅λλ€. 볡μ‘ν κ³μ°μ΄ νμ μμ΅λλ€. μ΄κ²μ κ³μ°μ μΌλ‘ λ§€μ° μ λ ΄ν©λλ€.
- λ°±λΆμ¨ λ¨μ (`%`): λ°±λΆμ¨μ 그리λ 컨ν μ΄λμ ν¬κΈ°μ μλμ μΌλ‘ κ²°μ λ©λλ€. λΆλͺ¨μ λλΉλ₯Ό κ°μ Έμ€λ μΆκ° λ¨κ³κ° νμνμ§λ§, μ¬μ ν λ§€μ° λΉ λ₯΄κ³ κ²°μ μ μΈ κ³μ°μ λλ€. λΈλΌμ°μ λ λ μ΄μμ νλ‘μΈμ€ μ΄κΈ°μ μ΄λ¬ν ν¬κΈ°λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
μ±λ₯ νλ‘ν: μ μ λ° λ°±λΆμ¨ ν¬κΈ° μ‘°μ λ§ μ¬μ©νλ λ μ΄μμμ μΌλ°μ μΌλ‘ λ§€μ° λΉ λ¦ λλ€. λΈλΌμ°μ λ 그리λ κΈ°ννμ ν¨μ¨μ μΈ λ¨μΌ ν¨μ€λ‘ ν΄κ²°ν μ μμ΅λλ€.
2. μ μ°ν ν¬κΈ° μ‘°μ
μ΄ λ²μ£Όλ μ μ°μ±μ λμ νμ¬ νΈλμ΄ μ¬μ© κ°λ₯ν 곡κ°μ μ μν μ μλλ‘ ν©λλ€. μ μ ν¬κΈ° μ‘°μ λ³΄λ€ μ½κ° λ 볡μ‘νμ§λ§ μ΅μ λΈλΌμ°μ μμλ μ¬μ ν κ³ λλ‘ μ΅μ νλμ΄ μμ΅λλ€.
- λΉμ¨ λ¨μ (`fr`): `fr` λ¨μλ 그리λ 컨ν μ΄λμ μ¬μ© κ°λ₯ν 곡κ°μ μΌλΆλ₯Ό λνλ λλ€. `fr` λ¨μλ₯Ό ν΄κ²°νκΈ° μν΄ λΈλΌμ°μ λ λ¨Όμ `px` λλ `auto` νΈλκ³Ό κ°μ λͺ¨λ λΉμ μ° νΈλμ΄ μ°¨μ§νλ 곡κ°μ λΊ λ€μ, λ¨μ 곡κ°μ `fr` νΈλλ€ μ¬μ΄μ λΉμ¨μ λ°λΌ λλλλ€.
μ±λ₯ νλ‘ν: `fr` λ¨μμ κ³μ°μ λ€λ¨κ³ νλ‘μΈμ€μ΄μ§λ§, 그리λ μμ΄ν μ μ½ν μΈ μ μμ‘΄νμ§ μλ μ μ μλ μνμ μ°μ°μ λλ€. λλΆλΆμ μΌλ°μ μΈ μ¬μ© μ¬λ‘μμ λ§€μ° μ±λ₯μ΄ λ°μ΄λ©λλ€.
3. μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ (μ±λ₯ ν«μ€ν)
μ¬κΈ°μλΆν° ν₯λ―Έλ‘μμ§κ³ μ μ¬μ μΌλ‘ λλ €μ§ μ μμ΅λλ€. μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ ν€μλλ λΈλΌμ°μ μ νΈλ λ΄ μμ΄ν μ μ½ν μΈ λ₯Ό κΈ°λ°μΌλ‘ νΈλ ν¬κΈ°λ₯Ό μ‘°μ νλλ‘ μ§μν©λλ€. μ΄λ μ½ν μΈ μ λ μ΄μμ μ¬μ΄μ κ°λ ₯ν μ°κ²°μ μμ±νμ§λ§ κ³μ° λΉμ©μ΄ λ°λ¦ λλ€.
- `min-content`: μ½ν μΈ μ κ³ μ ν μ΅μ λλΉλ₯Ό λνλ λλ€. ν μ€νΈμ κ²½μ°, μ΄κ²μ μΌλ°μ μΌλ‘ κ°μ₯ κΈ΄ λ¨μ΄λ μ€ λ°κΏμ΄ λΆκ°λ₯ν λ¬Έμμ΄μ λλΉμ λλ€. μ΄λ₯Ό κ³μ°νκΈ° μν΄ λΈλΌμ°μ μ λ μ΄μμ μμ§μ κ°μ₯ λμ λΆλΆμ μ°ΎκΈ° μν΄ κ°λ μ μΌλ‘ μ½ν μΈ λ₯Ό λ°°μΉν΄μΌ ν©λλ€.
- `max-content`: μ½ν μΈ μ κ³ μ ν μ νΈ λλΉλ₯Ό λνλ΄λ©°, λͺ μμ μΌλ‘ μ§μ λ μ€ λ°κΏ μΈμλ μ€ λ°κΏ μμ΄ μ°¨μ§ν λλΉμ λλ€. μ΄λ₯Ό κ³μ°νκΈ° μν΄ λΈλΌμ°μ λ μ 체 μ½ν μΈ λ₯Ό 무νν κΈ΄ ν μ€μ κ°λ μ μΌλ‘ λ°°μΉν΄μΌ ν©λλ€.
- `auto`: μ΄ ν€μλλ 컨ν μ€νΈμ λ°λΌ λ€λ¦ λλ€. 그리λ νΈλ ν¬κΈ°λ₯Ό μ‘°μ νλ λ° μ¬μ©λ λ, μμ΄ν μ΄ λμ΄λκ±°λ νΉμ ν¬κΈ°κ° μ§μ λμ§ μμ ν μΌλ°μ μΌλ‘ `max-content`μ²λΌ λμν©λλ€. λΈλΌμ°μ κ° ν¬κΈ°λ₯Ό κ²°μ νκΈ° μν΄ μ’ μ’ μ½ν μΈ λ₯Ό μΈ‘μ ν΄μΌ νλ―λ‘ λ³΅μ‘μ±μ `max-content`μ μ μ¬ν©λλ€.
μ±λ₯ νλ‘ν: μ΄ ν€μλλ€μ κ³μ°μ μΌλ‘ κ°μ₯ λΉμλλ€. μμΌκΉμ? μλ°©ν₯ μμ‘΄μ±μ μμ±νκΈ° λλ¬Έμ λλ€. 컨ν μ΄λμ λ μ΄μμμ μμ΄ν μ½ν μΈ μ ν¬κΈ°μ λ°λΌ λ¬λΌμ§μ§λ§, μμ΄ν μ½ν μΈ μ λ μ΄μμλ 컨ν μ΄λμ ν¬κΈ°μ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λΈλΌμ°μ λ μ¬λ¬ λ²μ λ μ΄μμ ν¨μ€λ₯Ό μνν΄μΌ ν μ μμ΅λλ€. νΈλ μ체μ μ΅μ’ ν¬κΈ°λ₯Ό κ³μ°νκΈ° μμνκΈ° μ μ ν΄λΉ νΈλμ λͺ¨λ λ¨μΌ μμ΄ν μ μ½ν μΈ λ₯Ό λ¨Όμ μΈ‘μ ν΄μΌ ν©λλ€. μμ΄ν μ΄ λ§μ 그리λμ κ²½μ° μ΄λ μλΉν λ³λͺ© νμμ΄ λ μ μμ΅λλ€.
4. ν¨μ κΈ°λ° ν¬κΈ° μ‘°μ
ν¨μλ λ€μν ν¬κΈ° μ‘°μ λͺ¨λΈμ κ²°ν©νμ¬ μ μ°μ±κ³Ό μ μ΄λ ₯μ λͺ¨λ μ 곡νλ λ°©λ²μ μ 곡ν©λλ€.
- `minmax(min, max)`: μ΄ ν¨μλ ν¬κΈ° λ²μλ₯Ό μ μν©λλ€. `minmax()`μ μ±λ₯μ μΈμλ‘ μ¬μ©λ λ¨μμ μ μ μΌλ‘ μμ‘΄ν©λλ€. `minmax(200px, 1fr)`μ κ³ μ κ°κ³Ό μ μ°ν κ°μ κ²°ν©νλ―λ‘ λ§€μ° μ±λ₯μ΄ μ’μ΅λλ€. κ·Έλ¬λ `minmax(min-content, 500px)`λ `min-content`μ μ±λ₯ λΉμ©μ μμλ°μ΅λλ€. λΈλΌμ°μ λ κ·Έκ²μ΄ μ΅λκ°λ³΄λ€ ν°μ§ νμΈνκΈ° μν΄ μ¬μ ν `min-content`λ₯Ό κ³μ°ν΄μΌ νκΈ° λλ¬Έμ λλ€.
- `fit-content(value)`: μ΄κ²μ ν¨κ³Όμ μΌλ‘ ν΄λ¨ν(clamp)μ λλ€. `minmax(auto, max-content)`μ λμΌνμ§λ§ μ£Όμ΄μ§ `value`μμ μ νλ©λλ€. λ°λΌμ `fit-content(300px)`λ `minmax(min-content, max(min-content, 300px))`μ²λΌ λμν©λλ€. μ΄κ² λν μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ μ μ±λ₯ λΉμ©μ μλ°ν©λλ€.
μ£Όμ λꡬ: Chrome κ°λ°μ λκ΅¬λ‘ νλ‘νμΌλ§νκΈ°
μ΄λ‘ μ μ μ©νμ§λ§ λ°μ΄ν°λ κ²°μ μ μ λλ€. 그리λ λ μ΄μμμ΄ μ€μ νκ²½μμ μ΄λ»κ² μλνλμ§ μ΄ν΄νλ €λ©΄ μΈ‘μ ν΄μΌ ν©λλ€. Google Chromeμ κ°λ°μ λꡬμ μλ Performance ν¨λμ μ΄λ₯Ό μν νμμ μΈ λꡬμ λλ€.
μ±λ₯ νλ‘ν κΈ°λ‘ λ°©λ²
νμν λ°μ΄ν°λ₯Ό μΊ‘μ²νλ €λ©΄ λ€μ λ¨κ³λ₯Ό λ°λ₯΄μΈμ:
- Chromeμμ μΉνμ΄μ§λ₯Ό μ½λλ€.
- κ°λ°μ λꡬλ₯Ό μ½λλ€ (F12, Ctrl+Shift+I λλ Cmd+Opt+I).
- Performance νμΌλ‘ μ΄λν©λλ€.
- νμλΌμΈμ μ μ©ν λ§μ»€λ₯Ό μ»κΈ° μν΄ "Web Vitals" 체ν¬λ°μ€κ° μ νλμ΄ μλμ§ νμΈν©λλ€.
- Record λ²νΌ (μ λͺ¨μ)μ ν΄λ¦νκ±°λ Ctrl+Eλ₯Ό λλ¦ λλ€.
- νλ‘νμΌλ§νλ €λ μμ μ μνν©λλ€. μ΄λ μ΄κΈ° νμ΄μ§ λ‘λ, λΈλΌμ°μ μ°½ ν¬κΈ° μ‘°μ λλ 그리λμ λμ μΌλ‘ μ½ν μΈ λ₯Ό μΆκ°νλ μμ (μ: νν° μ μ©)μΌ μ μμ΅λλ€. μ΄λ€μ λͺ¨λ λ μ΄μμ κ³μ°μ νΈλ¦¬κ±°νλ μμ μ λλ€.
- Stopμ ν΄λ¦νκ±°λ λ€μ Ctrl+Eλ₯Ό λλ¦ λλ€.
- κ°λ°μ λκ΅¬κ° λ°μ΄ν°λ₯Ό μ²λ¦¬νκ³ μμΈν νμλΌμΈμ μ 곡ν©λλ€.
νλ μ μ°¨νΈ λΆμ
νλ μ μ°¨νΈλ λ Ήνμ μ£Όμ μκ°μ ννμ λλ€. λ μ΄μμ λΆμμ μν΄μλ "Main" μ€λ λ μΉμ μ μ§μ€ν΄μΌ ν©λλ€.
"Rendering"μ΄λΌκ³ νμλ κΈΈκ³ λ³΄λΌμ λ§λλ₯Ό μ°ΎμΌμΈμ. κ·Έ μμμ "Layout"μ΄λΌκ³ νμλ λ μ§μ 보λΌμ μ΄λ²€νΈλ₯Ό μ°Ύμ μ μμ΅λλ€. μ΄κ²λ€μ΄ λΈλΌμ°μ κ° νμ΄μ§μ κΈ°ννμ ꡬ쑰λ₯Ό κ³μ°νλ νΉμ μκ°μ λλ€.
- κΈ΄ λ μ΄μμ μμ : λ¨μΌμ κΈ΄ 'Layout' λΈλ‘μ μν μ νΈμ λλ€. λ§μ°μ€λ₯Ό μ¬λ € μ§μ μκ°μ νμΈνμΈμ. κ°λ ₯ν μ»΄ν¨ν°μμ λͺ λ°λ¦¬μ΄(μ: > 10-15ms) μ΄μ 걸리λ λ μ΄μμ μμ μ μ μ¬μ μ₯μΉμμλ ν¨μ¬ λ λ릴 κ²μ΄λ―λ‘ μ‘°μ¬κ° νμν©λλ€.
- λ μ΄μμ μ€λμ±(Layout Thrashing): μ’ μ’ μλ°μ€ν¬λ¦½νΈ('Scripting' μ΄λ²€νΈ)μ λ²κ°μ κ°λ©° λΉ λ₯΄κ² μ°μμ μΌλ‘ λ°μνλ λ§μ μμ 'Layout' μ΄λ²€νΈλ₯Ό μ°ΎμΌμΈμ. λ μ΄μμ μ€λμ±μΌλ‘ μλ €μ§ μ΄ ν¨ν΄μ μλ°μ€ν¬λ¦½νΈκ° λ°λ³΅μ μΌλ‘ κΈ°ννμ μμ±(μ: `offsetHeight`)μ μ½μ λ€μ μ΄λ₯Ό 무ν¨ννλ μ€νμΌμ μμ±νμ¬ λΈλΌμ°μ κ° λ£¨ν λ΄μμ λ μ΄μμμ κ³μν΄μ λ€μ κ³μ°νλλ‘ κ°μ ν λ λ°μν©λλ€.
μμ½ λ° μ±λ₯ λͺ¨λν° μ¬μ©
- μμ½(Summary) ν: νλ μ μ°¨νΈμμ μκ° λ²μλ₯Ό μ νν ν, νλ¨μ μμ½ νμ μμ μκ°μ λΆμν νμ΄ μ°¨νΈλ₯Ό μ 곡ν©λλ€. "Rendering", νΉν "Layout"μ ν λΉλ λΉμ¨μ μ£Όμλ₯Ό κΈ°μΈμ΄μΈμ.
- μ±λ₯ λͺ¨λν°(Performance Monitor): μ€μκ° λΆμμ μν΄ μ±λ₯ λͺ¨λν°λ₯Ό μ½λλ€ (κ°λ°μ λꡬ λ©λ΄: More tools > Performance monitor). μ΄κ²μ CPU μ¬μ©λ, JS ν ν¬κΈ°, DOM λ Έλ, κ·Έλ¦¬κ³ κ²°μ μ μΌλ‘ μ΄λΉ λ μ΄μμ(Layouts/sec)μ λν μ€μκ° κ·Έλνλ₯Ό μ 곡ν©λλ€. νμ΄μ§μ μνΈ μμ©νλ©΄μ μ΄ κ·Έλνκ° κΈμ¦νλ κ²μ 보면 μ΄λ€ μμ μ΄ λΉμ©μ΄ λ§μ΄ λλ λ μ΄μμ μ¬κ³μ°μ μ λ°νλμ§ μ¦μ μ μ μμ΅λλ€.
μ€μ©μ μΈ νλ‘νμΌλ§ μλ리μ€: μ΄λ‘ μμ μ€μ΅μΌλ‘
μ°λ¦¬μ μ§μμ λͺ κ°μ§ μ€μ©μ μΈ μμ λ₯Ό ν΅ν΄ μνν΄ λ΄ μλ€. λ€λ₯Έ 그리λ ꡬνμ λΉκ΅νκ³ κ°μ μ±λ₯ νλ‘νμ λΆμν κ²μ λλ€.
μλλ¦¬μ€ 1: κ³ μ & μ μ° (`px` λ° `fr`) vs. μ½ν μΈ κΈ°λ° (`auto`)
100κ°μ μμ΄ν μ΄ μλ μ ν 그리λλ₯Ό μμν΄ λ³΄μΈμ. μ΄μ λν λ κ°μ§ μ κ·Ό λ°©μμ λΉκ΅ν΄ λ³΄κ² μ΅λλ€.
μ κ·Όλ² A (μ±λ₯ μ’μ): κ³ μ λ μ΅μκ°κ³Ό μ μ°ν μ΅λκ°μ κ°μ§ `minmax()` μ¬μ©.
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
μ κ·Όλ² B (μ μ¬μ μΌλ‘ λλ¦Ό): `auto` λλ `max-content`λ₯Ό μ¬μ©νμ¬ μ½ν μΈ κ° μ΄ ν¬κΈ°λ₯Ό μ μνλλ‘ ν¨.
grid-template-columns: repeat(auto-fill, minmax(auto, 300px));
λΆμ:
- μ κ·Όλ² Aμμ λΈλΌμ°μ μ μμ μ κ°λ¨ν©λλ€. κ° μμ΄ν μ μ΅μ λλΉκ° 250pxμμ μκ³ μμ΅λλ€. 컨ν μ΄λ λλΉμ λͺ κ°μ μμ΄ν μ΄ λ€μ΄κ° μ μλμ§ λΉ λ₯΄κ² κ³μ°ν λ€μ λ¨μ 곡κ°μ κ·Έλ€ μ¬μ΄μ λΆλ°°ν μ μμ΅λλ€. μ΄κ²μ 컨ν μ΄λκ° μ μ΄νλ λΉ λ₯΄κ³ μΈμ¬μ μΈ(extrinsic) ν¬κΈ° μ‘°μ μ κ·Όλ²μ λλ€. μ±λ₯ νλ‘νμ λ μ΄μμ μμ μ λ§€μ° μ§§μ κ²μ λλ€.
- μ κ·Όλ² Bμμ λΈλΌμ°μ λ ν¨μ¬ λ μ΄λ €μ΄ μμ μ ν΄μΌ ν©λλ€. `auto` ν€μλ(μ΄ λ¬Έλ§₯μμλ μ’ μ’ `max-content`λ‘ ν΄κ²°λ¨)λ λ¨μΌ μ΄μ λλΉλ₯Ό κ²°μ νκΈ° μν΄ λΈλΌμ°μ κ° λ¨Όμ 100κ°μ λͺ¨λ μ ν μΉ΄λμ μ½ν μΈ λ₯Ό κ°μμΌλ‘ λ λλ§νμ¬ `max-content` λλΉλ₯Ό μ°ΎμμΌ ν¨μ μλ―Έν©λλ€. κ·Έλ° λ€μ μ΄ μΈ‘μ κ°μ 그리λ ν΄κ²° μκ³ λ¦¬μ¦μ μ¬μ©ν©λλ€. μ΄ λ΄μ¬μ μΈ(intrinsic) ν¬κΈ° μ‘°μ μ κ·Όλ²μ μ΅μ’ λ μ΄μμμ κ²°μ νκΈ° μ μ λ§λν μμ μ¬μ μΈ‘μ μμ μ΄ νμν©λλ€. μ±λ₯ νλ‘νμ λ μ΄μμ μμ μ μ μ¬μ μΌλ‘ μμ λ°° λ κΈΈμ΄μ§ κ²μ λλ€.
μλλ¦¬μ€ 2: κΉκ² μ€μ²©λ 그리λμ λΉμ©
그리λμ μ±λ₯ λ¬Έμ λ 볡ν©μ μΌλ‘ λ°μν μ μμ΅λλ€. λΆλͺ¨ 그리λκ° μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ μ μ¬μ©νκ³ κ·Έ μμλ€λ 볡μ‘ν 그리λμΈ λ μ΄μμμ μκ°ν΄ 보μΈμ.
μμ:
λ©μΈ νμ΄μ§ λ μ΄μμμ λ μ΄ κ·Έλ¦¬λμ λλ€: `grid-template-columns: max-content 1fr;`. 첫 λ²μ§Έ μ΄μ λ€μν μμ ―μ ν¬ν¨νλ μ¬μ΄λλ°μ λλ€. μ΄ μμ ― μ€ νλλ λ¬λ ₯μ΄λ©°, μ΄ μμ CSS 그리λλ‘ λ§λ€μ΄μ‘μ΅λλ€.
λΆμ:
λΈλΌμ°μ μ λ μ΄μμ μμ§μ μ΄λ €μ΄ μμ‘΄μ± μ²΄μΈμ μ§λ©΄ν©λλ€:
- λ©μΈ νμ΄μ§μ `max-content` μ΄μ ν΄κ²°νλ €λ©΄ μ¬μ΄λλ°μ `max-content` λλΉλ₯Ό κ³μ°ν΄μΌ ν©λλ€.
- μ¬μ΄λλ°μ λλΉλ₯Ό κ³μ°νλ €λ©΄ λ¬λ ₯ μμ ―μ ν¬ν¨ν λͺ¨λ μμμ λλΉλ₯Ό κ³μ°ν΄μΌ ν©λλ€.
- λ¬λ ₯ μμ ―μ λλΉλ₯Ό κ³μ°νλ €λ©΄ μ체 λ΄λΆ 그리λ λ μ΄μμμ ν΄κ²°ν΄μΌ ν©λλ€.
λΆλͺ¨μ κ³μ°μ μμμ λ μ΄μμμ΄ μμ ν ν΄κ²°λ λκΉμ§ μ°¨λ¨λ©λλ€. μ΄ κΉμ κ²°ν©μ λλΌμΈ μ λλ‘ κΈ΄ λ μ΄μμ μκ°μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. λ§μ½ μμ 그리λλ μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ μ μ¬μ©νλ€λ©΄ λ¬Έμ λ λμ± μ νλ©λλ€. μ΄λ¬ν νμ΄μ§λ₯Ό νλ‘νμΌλ§νλ©΄ μ΄κΈ° λ λλ§ μ€μ λ¨μΌμ λ§€μ° κΈ΄ 'Layout' μμ μ΄ λνλ κ°λ₯μ±μ΄ λμ΅λλ€.
μ΅μ ν μ λ΅ λ° λͺ¨λ² μ¬λ‘
λΆμμ λ°νμΌλ‘ κ³ μ±λ₯ 그리λ λ μ΄μμμ ꡬμΆνκΈ° μν λͺ κ°μ§ μ€ν κ°λ₯ν μ λ΅μ λμΆν μ μμ΅λλ€.
1. λ΄μ¬μ ν¬κΈ° μ‘°μ λ³΄λ€ μΈμ¬μ ν¬κΈ° μ‘°μ μ μ νΈνλΌ
μ΄κ²μ΄ 그리λ μ±λ₯μ ν©κΈλ₯ μ λλ€. κ°λ₯ν λλ§λ€ 그리λ 컨ν μ΄λκ° `px`, `rem`, `%`, `fr`κ³Ό κ°μ λ¨μλ₯Ό μ¬μ©νμ¬ νΈλμ ν¬κΈ°λ₯Ό μ μνλλ‘ νμΈμ. μ΄λ λΈλΌμ°μ μ λ μ΄μμ μμ§μ λͺ ννκ³ μμΈ‘ κ°λ₯ν μ μ½ μ‘°κ±΄ μ§ν©μ μ 곡νμ¬ λ λΉ λ₯Έ κ³μ°μ κ°λ₯νκ² ν©λλ€.
μ΄κ² λμ (λ΄μ¬μ ):
grid-template-columns: repeat(auto-fit, max-content);
μ΄κ²μ μ νΈ (μΈμ¬μ ):
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
2. μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ μ λ²μλ₯Ό μ ννλΌ
`min-content` λ° `max-content`μλ λλ‘λ€μ΄ λ©λ΄λ νΌ νλ μμ λ μ΄λΈκ³Ό κ°μ μ ν¨ν μ¬μ© μ¬λ‘κ° μμ΅λλ€. λ°λμ μ¬μ©ν΄μΌ ν λλ κ·Έ μν₯μ μ ννλλ‘ λ Έλ ₯νμΈμ:
- μ μ μμ νΈλμ μ μ©: μλ°± κ°μ μμ΄ν μ΄ μλ λ°λ³΅ ν¨ν΄μ΄ μλ λ¨μΌ μ΄μ΄λ νμ μ¬μ©νμΈμ.
- λΆλͺ¨λ₯Ό μ ν: μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ μ μ¬μ©νλ 그리λλ₯Ό `max-width`κ° μλ 컨ν μ΄λ μμ λ°°μΉνμΈμ. μ΄λ λ μ΄μμ μμ§μ κ²½κ³λ₯Ό μ 곡νμ¬ λλλ‘ κ³μ°μ μ΅μ ννλ λ° λμμ΄ λ μ μμ΅λλ€.
- `minmax()`μ κ²°ν©: `minmax(200px, max-content)`μ κ°μ΄ μ½ν μΈ κΈ°λ° ν€μλμ ν¨κ» ν©λ¦¬μ μΈ μ΅μ λλ μ΅λκ°μ μ 곡νμΈμ. μ΄λ λΈλΌμ°μ κ° κ³μ°μ μμνλ λ° λμμ μ€ μ μμ΅λλ€.
3. `subgrid`λ₯Ό μ΄ν΄νκ³ νλͺ νκ² μ¬μ©νλΌ
`subgrid`λ μ€μ²©λ 그리λκ° λΆλͺ¨ 그리λμ νΈλ μ μλ₯Ό μ±νν μ μκ² ν΄μ£Όλ κ°λ ₯ν κΈ°λ₯μ λλ€. μ΄κ²μ μ λ ¬μ λ§€μ° μ μ©ν©λλ€.
μ±λ₯μ λ―ΈμΉλ μν₯: `subgrid`λ μλ μ κ²μ΄ λ μ μμ΅λλ€. ννΈμΌλ‘λ λΆλͺ¨μ μμ λ μ΄μμ κ³μ° κ°μ κ²°ν©μ μ¦κ°μμΌ μ΄λ‘ μ μΌλ‘ μ΄κΈ° 볡μ‘ν λ μ΄μμ ν΄κ²°μ λ¦μΆ μ μμ΅λλ€. λ€λ₯Έ ννΈμΌλ‘λ μ²μλΆν° μμ΄ν μ΄ μλ²½νκ² μ λ ¬λλλ‘ λ³΄μ₯ν¨μΌλ‘μ¨ λ€λ₯Έ λ°©λ²μΌλ‘ μ λ ¬μ μλμΌλ‘ νλ΄ λ΄λ €κ³ ν λ λ°μν μ μλ νμ λ μ΄μμ λ³κ²½ λ° λ¦¬νλ‘μ°λ₯Ό λ°©μ§ν μ μμ΅λλ€. κ°μ₯ μ’μ μ‘°μΈμ νλ‘νμΌλ§νλ κ²μ λλ€. 볡μ‘ν μ€μ²© λ μ΄μμμ΄ μλ κ²½μ°, `subgrid` μ¬μ© μ¬λΆμ λ°λ₯Έ μ±λ₯μ μΈ‘μ νμ¬ νΉμ μ¬μ© μ¬λ‘μ μ΄λ κ²μ΄ λ λμμ§ νμΈνμΈμ.
4. κ°μν: λκ·λͺ¨ λ°μ΄ν°μ μ μν κΆκ·Ήμ μΈ ν΄κ²°μ±
μλ°± λλ μμ² κ°μ μμ΄ν μ΄ μλ 그리λ(μ: λ°μ΄ν° 그리λ, 무ν μ€ν¬λ‘€ μ¬μ§ κ°€λ¬λ¦¬)λ₯Ό ꡬμΆνλ κ²½μ°, μ΄λ€ CSS μ‘°μ λ κ·Όλ³Έμ μΈ λ¬Έμ λ₯Ό 극볡ν μ μμ΅λλ€: λΈλΌμ°μ λ μ¬μ ν λͺ¨λ λ¨μΌ μμμ λν λ μ΄μμμ κ³μ°ν΄μΌ ν©λλ€.
ν΄κ²°μ± μ κ°μν(virtualization) (λλ 'μλμ')μ λλ€. μ΄κ²μ νμ¬ λ·°ν¬νΈμ 보μ΄λ μμμ DOM μμλ§ λ λλ§νλ μλ°μ€ν¬λ¦½νΈ κΈ°λ° κΈ°μ μ λλ€. μ¬μ©μκ° μ€ν¬λ‘€νλ©΄ μ΄λ¬ν DOM λ Έλλ₯Ό μ¬μ¬μ©νκ³ μ½ν μΈ λ₯Ό κ΅μ²΄ν©λλ€. μ΄λ κ² νλ©΄ λ°μ΄ν°μ μ 100κ° λλ 100,000κ°μ μμ΄ν μ΄ μλλΌλ λ μ΄μμ κ³μ° μ€μ λΈλΌμ°μ κ° μ²λ¦¬ν΄μΌ νλ μμμ μλ₯Ό μκ³ μΌμ νκ² μ μ§ν μ μμ΅λλ€.
`react-window`λ `tanstack-virtual`κ³Ό κ°μ λΌμ΄λΈλ¬λ¦¬λ μ΄ ν¨ν΄μ κ²¬κ³ ν ꡬνμ μ 곡ν©λλ€. μ§μ μΌλ‘ λκ·λͺ¨ 그리λμ κ²½μ°, μ΄κ²μ΄ κ°μ₯ ν¨κ³Όμ μΈ μ±λ₯ μ΅μ ν λ°©λ²μ λλ€.
μ¬λ‘ μ°κ΅¬: μ ν λͺ©λ‘ 그리λ μ΅μ ν
κΈλ‘λ² μ΄μ»€λ¨Έμ€ μΉμ¬μ΄νΈμ νμ€μ μΈ μ΅μ ν μλ리μ€λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
λ¬Έμ : μ ν λͺ©λ‘ νμ΄μ§κ° λλ¦¬κ² λκ»΄μ§λλ€. λΈλΌμ°μ μ°½ ν¬κΈ°λ₯Ό μ‘°μ νκ±°λ νν°λ₯Ό μ μ©ν λ, μ νμ΄ μ μμΉλ‘ 리νλ‘μ°λκΈ° μ μ λμ λλ μ§μ°μ΄ μμ΅λλ€. Interaction to Next Paint (INP)μ λν μ½μ΄ μΉ λ°μ΄ν μ μκ° μ’μ§ μμ΅λλ€.
μ΄κΈ° μ½λ ("Before" μν):
그리λλ λ§€μ° μ μ°νκ² μ μλμ΄ μ ν μΉ΄λκ° μ½ν μΈ (μ: κΈ΄ μ ν μ΄λ¦)μ λ°λΌ μ΄ λλΉλ₯Ό κ²°μ ν μ μλλ‘ ν©λλ€.
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fill, fit-content(320px));
gap: 1rem;
}
μ±λ₯ λΆμ:
- λΈλΌμ°μ μ°½ ν¬κΈ°λ₯Ό μ‘°μ νλ©΄μ μ±λ₯ νλ‘νμ κΈ°λ‘ν©λλ€.
- νλ μ μ°¨νΈλ resize μ΄λ²€νΈκ° λ°μν λλ§λ€ κΈΈκ³ λ°λ³΅μ μΈ 'Layout' μμ μ 보μ¬μ£Όλ©°, νκ· μ μΈ μ₯μΉμμ 80ms μ΄μ μμλ©λλ€.
- `fit-content()` ν¨μλ `min-content`μ `max-content` κ³μ°μ μμ‘΄ν©λλ€. νλ‘νμΌλ¬λ κ° λ¦¬μ¬μ΄μ¦λ§λ€ λΈλΌμ°μ κ° κ·Έλ¦¬λ ꡬ쑰λ₯Ό μ¬κ³μ°νκΈ° μν΄ λ³΄μ΄λ λͺ¨λ μ ν μΉ΄λμ μ½ν μΈ λ₯Ό λ―ΈμΉ λ―μ΄ λ€μ μΈ‘μ νκ³ μμμ νμΈν©λλ€. μ΄κ²μ΄ μ§μ°μ μμΈμ λλ€.
ν΄κ²°μ± ("After" μν):
λ΄μ¬μ μΈ μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ λͺ¨λΈμμ μΈμ¬μ μΈ μ»¨ν μ΄λ μ μ λͺ¨λΈλ‘ μ νν©λλ€. μΉ΄λμ λν νκ³ ν μ΅μ ν¬κΈ°λ₯Ό μ€μ νκ³ μ¬μ© κ°λ₯ν 곡κ°μ μΌλΆκΉμ§ μ μ°νκ² λμ΄λ μ μλλ‘ ν©λλ€.
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1rem;
}
μ ν μΉ΄λμ CSS λ΄λΆμ, μ΄ μλ‘κ³ λ κ²¬κ³ ν 컨ν μ΄λ λ΄μμ μ μ¬μ μΌλ‘ κΈ΄ μ½ν μΈ λ₯Ό μ°μνκ² μ²λ¦¬νκΈ° μν κ·μΉμ μΆκ°ν©λλ€:
.product-title {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
κ²°κ³Ό:
- 리μ¬μ΄μ§νλ©΄μ μλ‘μ΄ μ±λ₯ νλ‘νμ κΈ°λ‘ν©λλ€.
- νλ μ μ°¨νΈλ μ΄μ 'Layout' μμ μ΄ λ―Ώμ μ μμ μ λλ‘ μ§§μμ Έ, μ§μμ μΌλ‘ 5ms λ―Έλ§μ μ μ§νλ κ²μ 보μ¬μ€λλ€.
- λΈλΌμ°μ λ λ μ΄μ μ½ν μΈ λ₯Ό μΈ‘μ ν νμκ° μμ΅λλ€. 컨ν μ΄λμ λλΉμ `280px` μ΅μκ°μ κΈ°λ°μΌλ‘ κ°λ¨ν μνμ κ³μ°μ μνν©λλ€.
- μ¬μ©μ κ²½νμ΄ λ³νν©λλ€. 리μ¬μ΄μ§μ΄ λΆλλ½κ³ μ¦κ°μ μ λλ€. λΈλΌμ°μ κ° μλ‘μ΄ λ μ΄μμμ κ±°μ μ¦μ κ³μ°ν μ μκΈ° λλ¬Έμ νν° μ μ©μ΄ λΉ λ¦Ώνκ² λκ»΄μ§λλ€.
ν¬λ‘μ€ λΈλΌμ°μ λꡬμ λν μ°Έκ³ μ¬ν
μ΄ κ°μ΄λλ Chrome κ°λ°μ λꡬμ μ΄μ μ λ§μΆμμ§λ§, μ¬μ©μλ λ€μν λΈλΌμ°μ μ νΈλλ₯Ό κ°μ§κ³ μμμ κΈ°μ΅νλ κ²μ΄ μ€μν©λλ€. Firefoxμ κ°λ°μ λꡬμλ μ μ¬ν νλ μ μ°¨νΈμ λΆμ κΈ°λ₯μ μ 곡νλ νλ₯ν Performance ν¨λ('Profiler'λΌκ³ λ ν¨)μ΄ μμ΅λλ€. Safariμ Web Inspectorμλ λ λλ§ μ±λ₯ νλ‘νμΌλ§μ μν κ°λ ₯ν 'Timelines' νμ΄ ν¬ν¨λμ΄ μμ΅λλ€. νμ μ£Όμ λΈλΌμ°μ μμ μ΅μ νλ₯Ό ν μ€νΈνμ¬ λͺ¨λ κΈλ‘λ² μ¬μ©μμκ² μΌκ΄λκ³ κ³ νμ§μ κ²½νμ 보μ₯νμΈμ.
κ²°λ‘ : μ€κ³μ μν κ³ μ±λ₯ 그리λ ꡬμΆ
CSS 그리λλ λ§€μ° κ°λ ₯ν λꡬμ΄μ§λ§, κ°μ₯ μ§λ³΄λ κΈ°λ₯μλ κ³μ° λΉμ©μ΄ λ°λ¦ λλ€. κ΄λ²μν μ₯μΉμ λ€νΈμν¬ μ‘°κ±΄μ κ°μ§ κΈλ‘λ² κ³ κ°μ μν΄ κ°λ°νλ μΉ μ λ¬Έκ°λ‘μ, μ°λ¦¬λ κ°λ° κ³Όμ μ 맨 μ²μλΆν° μ±λ₯μ μμν΄μΌ ν©λλ€.
ν΅μ¬ μμ μ λΆλͺ ν©λλ€:
- λ μ΄μμμ μ±λ₯ λ³λͺ©μ μ λλ€: λ λλ§μ 'λ μ΄μμ' λ¨κ³λ νΉν CSS 그리λμ κ°μ 볡μ‘ν μ μ½ κΈ°λ° μμ€ν μμ λΉμ©μ΄ λ§μ΄ λ€ μ μμ΅λλ€.
- ν¬κΈ° μ‘°μ μ λ΅μ΄ μ€μν©λλ€: μΈμ¬μ μΈ μ»¨ν μ΄λ μ μ ν¬κΈ° μ‘°μ (`px`, `fr`, `%`)μ λ΄μ¬μ μΈ μ½ν μΈ κΈ°λ° ν¬κΈ° μ‘°μ (`min-content`, `max-content`, `auto`)λ³΄λ€ κ±°μ νμ μ±λ₯μ΄ λ°μ΄λ©λλ€.
- μΆμΈ‘νμ§ λ§κ³ μΈ‘μ νμΈμ: λΈλΌμ°μ μ±λ₯ νλ‘νμΌλ¬λ λλ²κΉ λ§μ μν κ²μ΄ μλλλ€. λ μ΄μμ μ νμ λΆμνκ³ μ΅μ νλ₯Ό κ²μ¦νκΈ° μν΄ μ κ·Ήμ μΌλ‘ μ¬μ©νμΈμ.
- μΌλ°μ μΈ κ²½μ°μ μ΅μ ννμΈμ: λ§μ μμ΄ν 컬λ μ μ κ²½μ°, κ°λ¨νκ³ μΈμ¬μ μΈ κ·Έλ¦¬λ μ μκ° λ³΅μ‘νκ³ μ½ν μΈ μΈμμ μΈ μ μλ³΄λ€ λ λμ μ¬μ©μ κ²½νμ μ 곡ν κ²μ λλ€.
μ±λ₯ νλ‘νμΌλ§μ μ κ· μν¬νλ‘μ°μ ν΅ν©ν¨μΌλ‘μ¨, CSS 그리λλ‘ μ κ΅νκ³ λ°μμ΄ λΉ λ₯΄λ©° κ²¬κ³ ν λ μ΄μμμ ꡬμΆν μ μμΌλ©°, μκ°μ μΌλ‘ λ©μ§ λΏλ§ μλλΌ μ μΈκ³ μ¬μ©μκ° λ―Ώμ μ μμ μ λλ‘ λΉ λ₯΄κ³ μ κ·ΌνκΈ° μ½λ€λ νμ μ κ°μ§ μ μμ΅λλ€.